package editorsvg.propiedades.tabla;

import editorsvg.propiedades.GrupoPropiedades;
import editorsvg.propiedades.Propiedad;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;

/**
 * Panel para la edición de un grupo de propiedades.
 * 
 * @author  Jorge Berjano
 */
public class PanelTablaGrupo extends javax.swing.JPanel {
    
    private GrupoPropiedades grupoPropiedades;
    private ImageIcon iconoMas;
    private ImageIcon iconoMenos;
    private ModeloTablaPropiedades modelo;    
    
    /** Contructor */
    public PanelTablaGrupo(GrupoPropiedades grupoPropiedades) {
        initComponents();        
        inicializar(grupoPropiedades);
    }
    
    /**
     * Inicializa la el panel
     * @param grupoPropiedades El grupo de propiedades que se van a editar.
     */
    private void inicializar(GrupoPropiedades grupoPropiedades) {
        
        this.grupoPropiedades = grupoPropiedades;       
        
        iconoMas = new ImageIcon(getClass().getResource("/editorsvg/propiedades/tabla/mas.png"));
        iconoMenos = new ImageIcon(getClass().getResource("/editorsvg/propiedades/tabla/menos.png"));
        
        if (grupoPropiedades == null) {
            tabla.setModel(new DefaultTableModel());
            return;
        }
        etiquetaTitulo.setText(grupoPropiedades.getTitulo());
        
        modelo = new ModeloTablaPropiedades(grupoPropiedades);
        tabla.setModel(modelo);
        
        EditorCeldaPropiedades editorCelda = new EditorCeldaPropiedades();
        TableColumnModel columnModel = tabla.getColumnModel();
        columnModel.getColumn(2).setCellRenderer(editorCelda);
        columnModel.getColumn(2).setCellEditor(editorCelda);
    }
    
    /**
     * Conmuta la visibilidad de la tabla.
     */
    private void conmutarVisibilidadTabla() {
        boolean hacerVisible = !tabla.isVisible();
        tabla.setVisible(hacerVisible);
        etiquetaTitulo.setIcon(hacerVisible ? iconoMenos : iconoMas);
    }

    void actualizar() {
        if (modelo != null)
            modelo.actualizar();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelCabecera = new javax.swing.JPanel();
        etiquetaTitulo = new javax.swing.JLabel();
        tabla = new javax.swing.JTable();

        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                formComponentHidden(evt);
            }
        });
        setLayout(new java.awt.BorderLayout());

        panelCabecera.setPreferredSize(new java.awt.Dimension(100, 20));
        panelCabecera.setLayout(new java.awt.BorderLayout());

        etiquetaTitulo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editorsvg/propiedades/tabla/menos.PNG"))); // NOI18N
        etiquetaTitulo.setText("Grupo");
        etiquetaTitulo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                etiquetaTituloMousePressed(evt);
            }
        });
        panelCabecera.add(etiquetaTitulo, java.awt.BorderLayout.WEST);

        add(panelCabecera, java.awt.BorderLayout.NORTH);

        tabla.setSelectionBackground(new java.awt.Color(255, 255, 255));
        tabla.setSelectionForeground(new java.awt.Color(0, 0, 0));
        tabla.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        add(tabla, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

    private void etiquetaTituloMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_etiquetaTituloMousePressed
        conmutarVisibilidadTabla();
    }//GEN-LAST:event_etiquetaTituloMousePressed

private void formComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentHidden
//    grupoPropiedades.borrarObservador(this);
}//GEN-LAST:event_formComponentHidden
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel etiquetaTitulo;
    private javax.swing.JPanel panelCabecera;
    private javax.swing.JTable tabla;
    // End of variables declaration//GEN-END:variables

}
